﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Translator.ModelToDataContract
{
    public class Bloqueio
    {
        public Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioRequest ToFiltroBloqueio(Model.Parameter.FiltroBloqueio from)
        {
            Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioRequest to = null;

            if (from != null)
            {
                to = new Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioRequest();

                to.Ativo = from.Ativo;
                to.Codigo = from.Codigo;

                if (from.Assessor != null)
                    to.CodigoAssessor = from.Assessor.Codigo;

                to.Cliente = this.ToCliente(from.Cliente);

                if(from.GrupoAfinidade != null)
                    to.CodigoGrupoAfinidade = from.GrupoAfinidade.Codigo;

                if(from.Mercado != null)
                    to.CodigoMercado = from.Mercado.Codigo;

                if(from.TipoCliente != null)
                    to.CodigoTipoCliente = from.TipoCliente.Codigo;

                if (from.DataFinal.HasValue)
                {
                    to.DataFinal = from.DataFinal.Value;
                }

                if (from.DataInicial.HasValue)
                {
                    to.DataInicial = from.DataInicial.Value;
                }

                to.Descricao = from.Descricao;

                if (from.NaturezaOperacao != null)
                {
                    switch (from.NaturezaOperacao.Value)
                    {
                        case Model.Enum.NaturezaOperacao.Compra:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Compra;
                            break;
                        case Model.Enum.NaturezaOperacao.Venda:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Venda;
                            break;
                        case Model.Enum.NaturezaOperacao.CompraVenda:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.CompraVenda;
                            break;
                    }
                }

                if (from.Tipo != null)
                {
                    switch (from.Tipo.Value)
                    {
                        case Model.Enum.TipoBloqueio.Cliente:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Cliente;
                            break;
                        case Model.Enum.TipoBloqueio.Assessor:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Assessor;
                            break;
                        case Model.Enum.TipoBloqueio.TipoCliente:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.TipoCliente;
                            break;
                        case Model.Enum.TipoBloqueio.GrupoAfinidade:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.GrupoAfinidade;
                            break;
                        case Model.Enum.TipoBloqueio.Papel:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Papel;
                            break;
                        case Model.Enum.TipoBloqueio.Mercado:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Mercado;
                            break;
                    }
                }
            }

            return to;
        }

        public Bovespa.ManutencaoOrdens.Bloqueio.BloqueioRequest ToBloqueio(Model.Bloqueio from)
        {
            Bovespa.ManutencaoOrdens.Bloqueio.BloqueioRequest to = null;

            if (from != null)
            {
                to = new Bovespa.ManutencaoOrdens.Bloqueio.BloqueioRequest();

                to.Ativo = from.Ativo;
                to.Codigo = from.Codigo;

                if (from.Assessor != null)
                    to.CodigoAssessor = from.Assessor.Codigo;

                to.Cliente = this.ToCliente(from.Cliente);

                if (from.GrupoAfinidade != null)
                    to.CodigoGrupoAfinidade = from.GrupoAfinidade.Codigo;

                if (from.Mercado != null)
                    to.CodigoMercado = from.Mercado.Codigo;

                if (from.TipoCliente != null)
                    to.CodigoTipoCliente = from.TipoCliente.Codigo;

                if (from.DataFinal.HasValue)
                {
                    to.DataFinal = from.DataFinal.Value;
                }

                if (from.DataInicial.HasValue)
                {
                    to.DataInicial = from.DataInicial.Value;
                }

                to.Descricao = from.Descricao;

                if (from.NaturezaOperacao != null)
                {
                    switch (from.NaturezaOperacao.Value)
                    {
                        case Model.Enum.NaturezaOperacao.Compra:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Compra;
                            break;
                        case Model.Enum.NaturezaOperacao.Venda:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Venda;
                            break;
                        case Model.Enum.NaturezaOperacao.CompraVenda:
                            to.NaturezaOperacao = Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.CompraVenda;
                            break;
                    }
                }

                if (from.Tipo != null)
                {
                    switch (from.Tipo.Value)
                    {
                        case Model.Enum.TipoBloqueio.Cliente:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Cliente;
                            break;
                        case Model.Enum.TipoBloqueio.Assessor:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Assessor;
                            break;
                        case Model.Enum.TipoBloqueio.TipoCliente:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.TipoCliente;
                            break;
                        case Model.Enum.TipoBloqueio.GrupoAfinidade:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.GrupoAfinidade;
                            break;
                        case Model.Enum.TipoBloqueio.Papel:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Papel;
                            break;
                        case Model.Enum.TipoBloqueio.Mercado:
                            to.Tipo = Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Mercado;
                            break;
                    }
                }
            }

            return to;
        }

        public Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioChaveRequest ToFiltroBloqueioChave(Model.Parameter.FiltroBloqueioChave from)
        {
            Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioChaveRequest to = null;

            if (from != null)
            {
                to = new Bovespa.ManutencaoOrdens.Bloqueio.FiltroBloqueioChaveRequest();

                to.Codigo = from.Codigo;
            }

            return to;
        }

        public Communication.Bovespa.ManutencaoOrdens.Bloqueio.Cliente ToCliente(Model.Cliente from)
        {
            if (from == null) return null;

            return new Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Bloqueio.Cliente
            {
                Codigo = from.Codigo,
                Apelido = from.Apelido
            };
        }
    }
}
